home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmigaPlus / Tools / Development / envCPP31 / c++ / rexx / browser.rexx next >
Encoding:
OS/2 REXX Batch file  |  2002-01-01  |  6.4 KB  |  291 lines

  1. /* rexx macro */
  2.  
  3. options results                             /* enable return codes     */
  4.  
  5. if (left(address(), 6) ~= "GOLDED") then    /* not started by GoldEd ? */
  6.  
  7.     address 'GOLDED.1'
  8.  
  9. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  10.  
  11. if (RC ~= 0) then
  12.  
  13.     exit
  14.  
  15. options failat 6                            /* ignore warnings         */
  16.  
  17. signal on syntax                            /* ensure clean exit       */
  18.  
  19. /* ------------------------- INSERT YOUR CODE HERE: -------------------- */
  20.  
  21. /* INPUT: SOFTWARE/K (supported values: SAS/C,SAS/C-GNUMAKE,VBCC,DICE,DICE-GNUMAKE,STORMC,GENERIC) */
  22. /*        COMMAND/K  (supported values: HIDE SHOW TOP BOTTOM PREV NEXT SELECT */
  23.  
  24. parse upper arg SOFTWARE COMMAND .
  25.  
  26. if (SOFTWARE = "") then
  27.  
  28.     SOFTWARE = "GENERIC"
  29.  
  30. 'QUERY CAT'
  31.  
  32. if (RESULT = "deutsch") then do
  33.  
  34.     STRING.sSCMSGERROR    = "Kann SAS/C-Message-Browser nicht starten !"
  35.     STRING.sUNSUPPORTED   = "This function is not supported|by the current C/C++ mode !"
  36.     STRING.sUNKNOWN       = "Unbekannter Fehler"
  37. end
  38. else do
  39.  
  40.     STRING.sSCMSGERROR    = "Can not start the SAS/C message browser !"
  41.     STRING.sUNSUPPORTED   = "Diese Funktion wird von der aktuellen|C/C++-Umgebung nicht unterstützt !"
  42.     STRING.sUNKNOWN       = "Unknown error"
  43. end
  44.  
  45. if ((SOFTWARE ~= "SAS/C") & (SOFTWARE ~= "SAS/C-GNUMAKE")) then do
  46.  
  47.     'REQUEST PROBLEM="' || STRING.sUNSUPPORTED || '"'
  48. end
  49. else do
  50.  
  51.     'QUERY PATH VAR=PATH'
  52.  
  53.     R = pragma('D', PATH)
  54.  
  55.     STATE.FILE    = ""
  56.     STATE.ERRTEXT = ""
  57.     STATE.LINE    = ""
  58.     STATE.ERRNUM  = ""
  59.     STATE.ALTFILE = ""
  60.     STATE.ALTLINE = ""
  61.  
  62.     if ((COMMAND = 'SELECT') | (COMMAND = 'NEXT') | (COMMAND = 'PREV') | (COMMAND = 'TOP') | (COMMAND = 'TOP')) THEN
  63.         NAVIGATE = 1
  64.     else
  65.         NAVIGATE = 0
  66.  
  67.     /* communicate with browser */
  68.  
  69.     if ((SOFTWARE = "SAS/C") | (SOFTWARE = "SAS/C-GNUMAKE")) then do
  70.  
  71.         if (COMMAND = "show") then
  72.  
  73.             COMMAND = "show activate"
  74.  
  75.         if (~show('P', 'SC_SCMSG')) then
  76.  
  77.             call run_scmsg
  78.  
  79.         if (show('P', 'SC_SCMSG')) then do
  80.  
  81.             address 'SC_SCMSG'
  82.  
  83.             options failat 35
  84.  
  85.             if (NAVIGATE = 0) then do
  86.  
  87.                 interpret COMMAND
  88.  
  89.                 address
  90.             end
  91.             else do
  92.  
  93.                 /* navigate to next error and get information on error */
  94.  
  95.                 interpret COMMAND
  96.  
  97.                 'file'
  98.  
  99.                 if (RESULT = "") then do
  100.  
  101.                     address
  102.                 end
  103.                 else do
  104.  
  105.                     STATE.FILE = RESULT
  106.  
  107.                     'text'
  108.  
  109.                     STATE.ERRTEXT = RESULT
  110.  
  111.                     'number'
  112.  
  113.                     STATE.ERRNUM = RESULT
  114.  
  115.                     'line'
  116.  
  117.                     STATE.LINE = RESULT
  118.  
  119.                     /* show error in editor */
  120.  
  121.                     address
  122.  
  123.                     call showstate
  124.  
  125.                 end
  126.             end
  127.  
  128.             options failat 6
  129.         end
  130.     end
  131. end
  132.  
  133. /* ---------------------------- END OF YOUR CODE ----------------------- */
  134.  
  135. 'UNLOCK' /* VERY important: unlock GUI */
  136. EXIT
  137.  
  138. SYNTAX:
  139.  
  140. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  141. 'UNLOCK'
  142. EXIT
  143.  
  144. /* /// "run_scmsg" */
  145.  
  146. run_scmsg: procedure EXPOSE STRING.
  147.  
  148.     /*  update env variable to reflect path of current project */
  149.  
  150.     'QUERY PATH VAR=PATH'
  151.  
  152.     'EXPAND NAME="' || PATH || '" VAR=PATH'
  153.  
  154.     'SET $sc/projdir "' || PATH || '"'
  155.  
  156.     /* show browser window ? */
  157.  
  158.     'QUERY OPTIONBROWSER VAR=OPTIONBROWSER'
  159.  
  160.     /* direct SCMSG to show up on our screen */
  161.  
  162.     'QUERY SCREEN VAR=PUBSCRNAME'
  163.  
  164.     if (show('P', 'SC_SCMSG')) then do
  165.  
  166.         if (OPTIONBROWSER = "TRUE") then
  167.  
  168.             address 'SC_SCMSG' 'opts screen ' || PUBSCRNAME
  169.     end
  170.     else do
  171.  
  172.         /* read and update SCMSG config file (update screen name and arexx port) */
  173.  
  174.         if (~exists("env:sc")) then
  175.  
  176.             'FILE NEWDIR NAME="env:sc"'
  177.  
  178.         LINES = 0
  179.  
  180.         if open('SCMSG', 'env:sc/scmsg', 'READ') then do
  181.  
  182.             do until eof('SCMSG')
  183.  
  184.                 DATA = readln('SCMSG')
  185.  
  186.                 parse upper var DATA COMMAND .
  187.  
  188.                 if ((COMMAND ~= "PORTNAME") & (COMMAND ~= "PUBSCREEN") & (COMMAND ~= "EDITCOMMAND") & (COMMAND ~= "GOTOFILE") & (COMMAND ~= "GOTOLINE")) then do
  189.  
  190.                     LINES = LINES + 1
  191.  
  192.                     CONFIG.LINES = DATA
  193.                 end
  194.  
  195.             end
  196.  
  197.             R = close('SCMSG')
  198.  
  199.             /* save updated config file (with current port/pubscreen name) */
  200.  
  201.             if open('SCMSG', 'env:sc/scmsg', 'WRITE') then do
  202.  
  203.                 PORTNAME = ADDRESS()
  204.  
  205.                 R = writeln('SCMSG', "PORTNAME "  || PORTNAME  )
  206.  
  207.                 R = writeln('SCMSG', "PUBSCREEN " || PUBSCRNAME)
  208.  
  209.                 R = writeln('SCMSG', "GOTOFILE WINDOW USE=%f FORCE")
  210.  
  211.                 R = writeln('SCMSG', "GOTOLINE GOTO INDENT LINE=%l UNFOLD=TRUE")
  212.  
  213.                 R = writeln('SCMSG', "EDITCOMMAND golded:ed")
  214.  
  215.                 if (LINES ~= 0) then do
  216.  
  217.                     do LINE=1 to (LINES - 1)
  218.  
  219.                         R = writeln('SCMSG', CONFIG.LINE)
  220.                     end
  221.                 end
  222.  
  223.                 R = close('SCMSG')
  224.             end
  225.         end
  226.  
  227.         /* run scmsg */
  228.  
  229.         if (exists("sc:c/scmsg")) then do
  230.  
  231.             COMMANDSTRING = 'sc:c/scmsg screen "' || PUBSCRNAME || '"'
  232.  
  233.             if (OPTIONBROWSER ~= "TRUE") then
  234.  
  235.                 COMMANDSTRING = COMMANDSTRING || ' rexxonly'
  236.  
  237.             'FIX VAR=COMMANDSTRING'
  238.  
  239.             'RUN ASYNC CMD="' || COMMANDSTRING || '" WAITPORT="SC_SCMSG" SECONDS=10 DIR="' || PATH || '"'
  240.         end
  241.  
  242.         if (~show('P', 'SC_SCMSG')) then do
  243.  
  244.             'REQUEST PROBLEM="' || STRING.sSCMSGERROR || '"'
  245.  
  246.             'UNLOCK'
  247.  
  248.             exit
  249.         end
  250.     end
  251.  
  252.     return
  253.  
  254. /* /// */
  255. /* /// "showstate" */
  256.  
  257. showstate: procedure expose STATE.
  258.  
  259.     /* show line and error (described by <state.>) in editor */
  260.  
  261.     if (STATE.FILE ~= "") then do
  262.  
  263.         'WINDOW USE="' || STATE.FILE || '" FORCE'
  264.  
  265.         if (RC = 0) then do
  266.  
  267.             if (STATE.LINE ~= "") then do
  268.  
  269.                 'GOTO INDENT LINE=' || STATE.LINE || ' UNFOLD=TRUE'
  270.             end
  271.  
  272.             if (STATE.ERRTEXT = "") then
  273.  
  274.                 STATE.ERRTEXT = STRING.sUNKNOWN
  275.  
  276.             if (STATE.ERRNUM ~= "") then
  277.  
  278.                 STATE.ERRTEXT = STATE.ERRNUM || ': ' || STATE.ERRTEXT
  279.  
  280.             'FIX VAR=STATE.ERRTEXT'
  281.  
  282.             'FIX VAR=STATE.ERRNUM'
  283.  
  284.             'REQUEST STATUS="' || STATE.ERRTEXT || '"'
  285.         end
  286.     end
  287.  
  288.     return
  289.  
  290. /* /// */
  291.